<?php
namespace app\controller;

use app\BaseController;
use \think\facade\Request;
use \think\facade\Cache;
use \think\facade\Db;
use \think\facade\Log;
use \think\File;
class Excel extends BaseController
{
  //导出
  public function exportData(Request $request)
  {
        $params = Request::param();
        $map = [];
        if(isset($params['bath']) && $params['bath'] != ''){
            $map[] = ['bath','=',$params['bath']];
        }
        
        $data = [];
            $dataList1 = Db::name('qrcode')
                ->field('qr_sn,id,pid')
                // ->where('pid','in','10000,9999') //改成模糊查询
                ->where($map) //改成模糊查询
                ->select()
                ->all();
            $domain = Request::domain();
           foreach($dataList1 as &$item1){
                $p_qr_sn = Db::name('qrcode_p')
                    ->where('id',$item1['pid'])
                    ->value('qr_sn');
                $item1['box_url'] = $domain.'/qrcode/?id='.$p_qr_sn;
                $item1['goods_url'] = $domain.'/qrcode/?id='.$item1['qr_sn'];
           }
        //此处说明：解决数字太长尾数变000的问题
        //由于数字超过15位，会被显示成0或者加小数点处理。造成这种情况是由于Excel内置的数值有效范围是15位。超过15位，如果要显示的话，就需要转换成非数字格式。比如文本格式。
        // pid 数字是17 位 1的话就是 0000000001
        $expData = [];
        foreach ($dataList1 as $key => $value) {
            // 格式化pid 7位
            $expData[$key]['pid'] = "\t".$value['pid']."\t";
            $expData[$key]['box_url'] = "\t".$value['box_url']."\t";
            $expData[$key]['goods_url'] = "\t".$value['goods_url']."\t";
            $expData[$key]['goods_number'] = "\t".$value['qr_sn']."\t";
            
        }
        //这里规定列名
        return \Excel::export('二维码导出'.time().'.xlsx',['箱码编号','箱码二维码链接','对应盒码链接','盒码下方数字码'],$expData);
 
 }
}